1. 题目描述(中等难度)
[success] 63. 不同路径 II
2. 解法一:动态规划
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
if(null == obstacleGrid || obstacleGrid.length == 0){
return 0;
}
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[][] dp = new int[m][n];
dp[0][0] = 1 - obstacleGrid[0][0];
//base case
for(int i=1;i<m;i++){
if(obstacleGrid[i][0] == 0 && dp[i-1][0] == 1){
dp[i][0] = 1;
}
}
for(int j=1;j<n;j++){
if(obstacleGrid[0][j] == 0 && dp[0][j-1] == 1){
dp[0][j] = 1;
}
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(obstacleGrid[i][j] == 1){
continue;
}
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
}